/*! \file InPerFot.h
    \brief Interface do Modulo Percistencia de Fotos.
*/

#ifndef PerFot
#define PerFot

#ifdef PerFot_Serv
#define ExtPF
#else
#define ExtPF extern
#endif

/*! \def ARQUIVO_PF
    \brief O nome do arquivo do Banco de dados usuario
*/

/*! \def NARQUIVO_PF
    \brief A type definition for a .
*/

/*! \def TAMANHOREG_PF
    \brief A type definition for a .
*/

/*! \def VARIAVELCONTROLE_PF
    \brief A type definition for a .
*/

/*! \def EXTENCAO_PF
    \brief ------------------------.
*/

#define ARQUIVO_PF "Foto.txt"
#define NARQUIVO_PF "Foto"
#define TAMANHOREG_PF 82
#define EXTENSAO_PF ".txt"
#define VARIAVELCONTROLE_PF '$'

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "InVetBit.h"

/**
   \struct Foto_M
   \brief Representaçao da foto no contexto de persistencia de fotos variaveis.
 */
struct Foto_M {
    char CpfUser[12];      /**< Armazena o Cpf do dono da foto.*/
    char CodigAlbum[11];   /**< Armazena o Albun que contem a foto.*/
    char CodigFoto[11];    /**< Armazena o codigo da foto.*/
    char Nome[16];         /**< Armazena o nome da foto.*/
    char Data[11];         /**< Armazena a data da foto.*/
    char Veloc[4];         /**< Armazena o coeficiente da velocidade da foto.*/
    char Abert[4];         /**< Armazena a Abertura com que a foto foi tirada*/
    char Iso[4];           /**< Armazena o iso da foto*/
    float Media;           /**< Armazena a media da foto**/
    int NumerVotos;        /**< Armazena o numero votos*/
};

/*! \var typedef struct Foto_M FotoPF
    \brief Redefinido a struct Foto_M para varivel Foto_PF
 */
typedef struct Foto_M Foto_PF;


/*! \fn ExtPF int PegaFoto(const char* CpfPass, const char* CodigoAlbumPass, const char* CodigFotoPass, Foto_PF *FotoPega);
   \brief Responsavel por retornar uma Struct com os dados da fotografia de um usuario
   \param CpfPass : O cpf do Usuario a quem a foto pertence.
   \param CodigAlbumPass : O codigo do album o qual a foto pertence.
   \param CodigFotoPass : O codigo da foto.
   \param FotoPega : A struct da foto a ser preenchida.
   \return Um int diz o tipo de erro ocorrio:\n
      0 -  Se a senha esta correta\n
     -1 -  Erro de Banco de Dados\n
     -2 -  Foto nao encontrada\n
*/
ExtPF int PegaFoto_PF(const char*, const char*, const char*, Foto_PF*);

/*! \fn ExtPF int AtualizaFoto(Foto_PF* NovaFoto);
   \brief Responsavel por atualizar os dados de uma foto com os dados da struct que foi passada.
   \param NovaFoto : Uma struct preenchida com os novos dados da foto.
   \return Um inteiro que diz o tipo de erro ocorrido:\n
      0 -  Se a senha esta correta\n
     -1 -  Erro de Banco de Dados\n
     -2 -  O Usuario nao existe\n
*/
ExtPF int AtualizaFoto_PF(Foto_PF*);

/*! \fn ExtPF int DeletaFoto_PF(const char* CpfUserPass, const char* CodigAlbumPass, const char* CodigFotoPass);
   \brief Responsavel por deletar uma foto do banco de dados.
   \param CpfUserPass : O CPF do usuario a quem a foto pertence.
   \param CodigAlbumPass : O codigo do album no qual a foto a se encontra.
   \param CodigFotoPass : O codigo da foto a ser deletada.
   \return Um inteiro que diz se houve e qual o tipo de erro:\n
      0 -  Se o foto foi deletada corretamente\n
     -1 -  Erro de banco de Dados\n
     -2 -  A foto nao foi encontrada\n
	 OT - Erro no vetor de bits\n
*/
ExtPF int DeletaFoto_PF(const char*, const char*, const char*);

/*! \fn int AddFoto_PF (Foto_PF *NovaFoto)
   \brief Responsavel por adicionar uma foto ao banco de dados.
   \param FotoPass : O nome do Usuario a quem a foto pertence.
   \return Um inteiro que diz se houve e qual o tipo de erro:\n
		 0 - Foto adcionada corretamente\n
		-1 - Erro de banco de Dados\n
		-2 - A foto nao foi encontrada\n
		OT - Erro no vetor de bits\n
*/
ExtPF int AddFoto_PF(Foto_PF *FotoPass);

ExtPF int ListaFotos_PF (Foto_PF *FotoPass, int Pulo, const char* CpfPass, const char* CodigPass);
#endif
